#include <iostream>
#include <math.h>
#include <string.h>
using namespace std;


int main(){
	while(true){
		int n,m;
		cin>>n>>m;
		if(n == 0  &&  m == 0)
			break;
		int a[n][m],b[n][m],dp1[n][m],dp2[n][m];
		memset(dp1,0,sizeof(dp1));
		memset(dp2,0,sizeof(dp2));
		
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				cin>>a[i][j];
		for(int i=0;i<n;i++)
			for(int j=0;j<m;j++)
				cin>>b[i][j];
		
		
		for(int i=n-1;i>=0;i--){
			for(int j=m-1;j>=0;j--){
				if(i == n-1  &&  j == m-1){
					dp1[i][j] = a[i][j];
					continue;
				}
				if(i == n-1){
					dp1[i][j] = a[i][j]+dp1[i][j+1];
					continue;
				}
				if(j == m-1){
					dp1[i][j] = a[i][j]+dp1[i+1][j];
					continue;
				}
				dp1[i][j] = max(dp1[i+1][j],dp1[i][j+1])+a[i][j];
			}
		}
		for(int i=n-1;i>=0;i--){
			for(int j=m-1;j>=0;j--){
				if(i == n-1  &&  j == m-1){
					dp2[i][j] = b[i][j];
					continue;
				}
				if(i == n-1){
					dp2[i][j] = b[i][j]+dp2[i][j+1];
					continue;
				}
				if(j == m-1){
					dp2[i][j] = b[i][j]+dp2[i+1][j];
					continue;
				}
				dp2[i][j] = max(dp2[i+1][j],dp2[i][j+1])+b[i][j];
			}
		}
		
//		cout<<endl;
//		for(int i=0;i<n;i++){
//			for(int j=0;j<m;j++)
//				cout<<dp1[i][j]<<" ";
//			cout<<endl;
//		}
//		cout<<endl;
//		for(int i=0;i<n;i++){
//			for(int j=0;j<m;j++)
//				cout<<dp2[i][j]<<" ";
//			cout<<endl;
//		}
//		cout<<dp1[0][0]<<endl;
//		cout<<dp2[0][0]<<endl;
		cout<<dp1[0][0]+dp2[0][0]<<endl;
	}
	return 0;
}
